# @Time:2021/6/9 14:26
# @Author:5120195554王欣霏
# -*- coding = utf-8 -*-

import pygame
import os
import actor
import random
from dialog.earth_god_dialog import EarthGodDialog
from dialog.elder4_dialog import Elder4Dialog


# elder4
# elder4的加载：可以是在挖个图片加载完了之后发现有elder4的时候再加载
class Elder4(pygame.sprite.Sprite):
    def __init__(self, init_pos_x, init_pos_y):  # 载入图片资源并设置位置信息
        pygame.sprite.Sprite.__init__(self)  # 调用父类的构造函数

        # 多张图片载入的时候 这样写就不行了
        # img_path = os.path.join("../resource","img","swk","00000.tga") #.tga是动画格式 帧格式
        # self.swk_image = pygame.image.load(img_path)

        # 1.这里的pos_x和pos_y只是相对于窗体来说的 不是相对于图片来说的
        # 2.改进后的pos_x和pos_y就是全局位置了
        self.god_pos_x = init_pos_x
        self.god_pos_y = init_pos_y

        # self.frame_images = [] #存放需要用到的所有图片
        # self.frame_index = 0 #标记 记录当前图片的下标
        # self.frame_count = 10 #存放图片的数量
        #
        # for i in range(0,10):#加入图片
        #     img_path = os.path.join('../resource', 'img', 'god', '0214-16505471-0000' + str(i) + '.tga') #五位整数
        #     self.frame_images.append(pygame.image.load(img_path))
        self.walk_frames = actor.DirAction('elder', '', 'elder4-', 1, 6, True)
        self.dir = 0
        self.step_count = 0  # 用于记录在一个方向上走了多少步
        self.speed = 1

        # 增加elder4的rect属性
        self.width = 90
        self.height = 111
        self.rect = pygame.Rect(self.god_pos_x, self.god_pos_y, self.width, self.height)

        self.is_stop = False  # 是否停止的标记 当碰撞上了elder4就要停止运动

        # 设置对话框
        self.dialog = Elder4Dialog()

    def draw(self, surface: pygame.Surface, win_posx, win_posy):  # 将精灵画在surface上  第三四个参数是窗体相较于图片的偏移位置
        # current_frame = self.get_curr_frame() #取出当前应该画的图片
        current_frame = self.walk_frames.get_curr_frame(self.dir)
        # god_pos_x和god_pos_y是全局位置   用全局位置-窗体位置就可以得到elder4在屏幕中的偏移
        surface.blit(current_frame, (self.god_pos_x - win_posx, self.god_pos_y - win_posy))

        # 当孙悟空碰到elder4时 显示对话框
        if self.is_stop:
            surface.blit(self.dialog.surface,
                         (self.god_pos_x - win_posx, self.god_pos_y - win_posy - 150))  # 为了步和elder4重叠 将对话框向上移一点

    def set_pos(self, init_pos_x, init_pos_y):  # 设置位置的函数  第二个参数和第三个参数是起始的位置（全局位置）
        self.god_pos_x = init_pos_x
        self.god_pos_y = init_pos_y

    # def Move(self,vx,vy): #关于elder4移动的函数 vx和vy为速度
    #     self.god_pos_x += vx
    #     self.god_pos_y += vy

    def Move(self):
        if not self.is_stop:  # 没有停止的时候才运动
            self.step_count += 1  # 调用一次就加一
            if self.step_count >= 10:  # 当步数大于10时 就随机更改方向并重新记步
                self.step_count = 0
                self.dir = random.randint(0, 3)
                if self.dir == 0:
                    self.dir = 2
                elif self.dir == 2:
                    self.dir = 0
                elif self.dir == 1:
                    self.dir = 3
                elif self.dir == 3:
                    self.dir = 1
            if self.dir == 2:
                self.god_pos_x -= self.speed
                self.god_pos_y -= self.speed
            elif self.dir == 3:
                self.god_pos_x += self.speed
                self.god_pos_y -= self.speed
            elif self.dir == 0:
                self.god_pos_x += self.speed
                self.god_pos_y += self.speed
            elif self.dir == 1:
                self.god_pos_x -= self.speed
                self.god_pos_y += self.speed

    # def get_curr_frame(self):#找到当前要画的图
    #     current_img = self.frame_images[self.frame_index]
    #     if self.frame_index + 1 >= self.frame_count:#边界判断
    #         self.frame_index = 0
    #     else:
    #         self.frame_index += 1
    #     return current_img

    # 碰撞上了
    def collide(self, sprite):
        if pygame.sprite.collide_rect(sprite, self):
            self.is_stop = True
            return True
        else:
            self.is_stop = False
            return False
